home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / yacc / flexyacc / aflex.lha / aflex / src / tblcmpB.a < prev    next >
Text File  |  1991-05-16  |  28KB  |  947 lines

  1. -- Copyright (c) 1990 Regents of the University of California.
  2. -- All rights reserved.
  3. --
  4. -- This software was developed by John Self of the Arcadia project
  5. -- at the University of California, Irvine.
  6. --
  7. -- Redistribution and use in source and binary forms are permitted
  8. -- provided that the above copyright notice and this paragraph are
  9. -- duplicated in all such forms and that any documentation,
  10. -- advertising materials, and other materials related to such
  11. -- distribution and use acknowledge that the software was developed
  12. -- by the University of California, Irvine.  The name of the
  13. -- University may not be used to endorse or promote products derived
  14. -- from this software without specific prior written permission.
  15. -- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16. -- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17. -- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  
  19. -- TITLE table compression routines
  20. -- AUTHOR: John Self (UCI)
  21. -- DESCRIPTION used for compressed tables only
  22. -- NOTES somewhat complicated but works fast and generates efficient scanners
  23. -- $Header: /co/ua/self/arcadia/aflex/ada/src/RCS/tblcmpB.a,v 1.8 90/01/12 15:20:43 self Exp Locker: self $ 
  24.  
  25. with DFA, ECS, MISC_DEFS; use MISC_DEFS; 
  26. package body TBLCMP is 
  27.  
  28. -- bldtbl - build table entries for dfa state
  29. --
  30. -- synopsis
  31. --   int state[numecs], statenum, totaltrans, comstate, comfreq;
  32. --   bldtbl( state, statenum, totaltrans, comstate, comfreq );
  33. --
  34. -- State is the statenum'th dfa state.  It is indexed by equivalence class and
  35. -- gives the number of the state to enter for a given equivalence class.
  36. -- totaltrans is the total number of transitions out of the state.  Comstate
  37. -- is that state which is the destination of the most transitions out of State.
  38. -- Comfreq is how many transitions there are out of State to Comstate.
  39. --
  40. -- A note on terminology:
  41. --    "protos" are transition tables which have a high probability of
  42. -- either being redundant (a state processed later will have an identical
  43. -- transition table) or nearly redundant (a state processed later will have
  44. -- many of the same out-transitions).  A "most recently used" queue of
  45. -- protos is kept around with the hope that most states will find a proto
  46. -- which is similar enough to be usable, and therefore compacting the
  47. -- output tables.
  48. --    "templates" are a special type of proto.  If a transition table is
  49. -- homogeneous or nearly homogeneous (all transitions go to the same
  50. -- destination) then the odds are good that future states will also go
  51. -- to the same destination state on basically the same charad       logyw rely homogeneoue states aralse cme ow thede Catind witmilkagrulame
  52. -   sge that tity det a speciaarittnatito.  Is the transition tablwe are
  53. -s splity duse - td a pro,n) the(l tasical) eahicsubsn ettn,is similre
  54. -s state wildiffnter from e a proer fotwome out-transitioto.Oname of tsthe
  55. -- out-transitiote wilbope thae charad  e ow whicm e a proedoatey noo go
  56. -- to the cme oe destinatils, andnete wilbope thae charad  e ow whicm ere
  57. -s statdoatey noo -- to the cme oe destinatine. "templat,te on thed this
  58. --, a,oo -- to the cme on state oEVERYhe transitioe charad le, and therefois
  59. -c moss onndnetdiffntalenSE. te produturBLDy T(SMITE                                   :ed i
  60.                      UNBOUNVID_INT_ WARY;i
  61.                    SMITENUMON,OTALTARRECSCOMSMITECSCOMFREQ :ed iINTEGER)MP is    EXTPTR :eINTEGER;i
  62.     subl typC WARYMP iUNBOUNVID_INT_ WARY(0 .. CSIZE + 1);is    EXTRCT                 :earray(0 .. 1)ty of WARY;i
  63.     MINDIFFCS, NS PTES,, D :eINTEGER;i
  64.     CHECKCOM               :eBOOLEAN;i
  65.     LOCAL_COMSMITE         :eINTEGER;i
  66.   begin
  67.  
  68.     R
  69. --f extptrMP i0n) then thfirfastrrayty oextrctly ld is thmprulout of t
  70.     R
  71. -"b detdiffntalen"-- tdstatee which is osell transitione whicoccurMPn
  72.     R
  73. -"n sta"ed buy noincm e a proee whi,-- tdstateha is thfew detdiffntalens
  74.     R
  75. -betwetheit: sel, an"n sta"to.  IextptrMP i1n) then thsecofindrrayty 
  76.     R
  77. -extrctly lden thb detdiffntalenne.  Thtwomdrraytes artoggowl
  78.     R
  79. -betwethesoge that thb detdiffntalen-- tdsta  sclbops kept arouns an    R
  80. -l alsatdiffntalen-judetcreicatedyoe eckatinagainfast  scdidsta "b de"n    R
  81. -f prot
  82.     LOCAL_COMSMITE :=SCOMSMITE;is    EXTPTR := 0;isn    R
  83. -i of the statha isoohfew-- out-transitio,tdon'notd othetryctingon    R
  84. -e compaeit:ut tabln    i o((,OTALTARRE*100) < (NUM, E*S PTO_SIZE_P MEENTAGE)on) the
  85.       MKENTRY(SMITECSNUM, E, SMITENUMONJAMSMITE_CONSTON,OTALTARRE);is    elsel
  86.  
  87.       R
  88. -e ecke cch isrueui owtheithldss onne eck-"n sta"eagainfa
  89.       R
  90. -- protos which havy the sam", comsta" uivue
  91.       CHECKCOM :=SCOMFREQ*100 >N,OTALTARRE*CHECK_COM_P MEENTAGE;l
  92.  
  93.       , NS PT :=SFIRSTS PT;i
  94.       MINDIFF :=S,OTALTARRE;l
  95.  
  96.       i o(CHECKCOMon) the
  97.  
  98.         d
  99. -- finfirfasa proee whieha is the sam", comsta"
  100.         I :=SFIRSTS PT;i
  101.        ee wabl(I /= NIL) loop
  102.           i o(S PTCOMSM(I) = LOCAL_COMSMITEon) the
  103.             , NS PT :=SI;i
  104.             y TDIFF(SMITECS, NS PTESEXTRCT(EXTPTR), MINDIFF);i
  105.             exit;i
  106.           o e i ;i
  107.           I :=SS PTNEXT(I);i
  108.         o e loop;i
  109.       elsel
  110.  
  111.         d
  112. -tiscblwe'vame covided that tht mose cme oe destinati-- o
  113.         d
  114. -t o"n sta"edoatey nooccurMd wite a higr enougomfrettcy,
  115.         d
  116. -wtheehat th", comsta" roezero,nclaurcting thai of ioue sta
  117.         d
  118. -iouo entated - to tha proel di,eitte wily not bcofsovirwl
  119.         R
  120. -l  "templa.
  121.         LOCAL_COMSMITE :=S0;l
  122.  
  123.         i o(FIRSTS PT /= NIL) ) the
  124.           , NS PT :=SFIRSTS PT;i
  125.           y TDIFF(SMITECS, NS PTESEXTRCT(EXTPTR), MINDIFF);i
  126.         o e i ;i
  127.       o e i ;i
  128.  
  129.       d
  130. -wthcknch havy thfirfasi entasactina proeinc"erma pr"to.  
  131.       d
  132. -ittr me esMd wiincm e tolenelensheehar fot thfirfasa pro,
  133.       d
  134. -wthdon'nowndanh tod othet scacting thmprout of tha proel di
  135.       d
  136. -d toeeui owthl have ynd othereison tablr me es.
  137.       i o(MINDIFF*100 >N,OTALTARRE*FIRST_MATCH_DIFF_P MEENTAGE)n) the
  138.  
  139.         d
  140. -y noare goor enougr me to.S sclg thmprout of tha pros 
  141.         I :=S, NS PT;i
  142.        ee wabl(I /= NIL) loop
  143.           y TDIFF(SMITECSIESEXTRCT(1bl EXTPTR), D);i
  144.           i o(D < MINDIFF)n) the
  145.             EXTPTR := 1bl EXTPTR;e
  146.             , NDIFF :=SD;e
  147.             , NS PT :=SI;i
  148.           o e i ;i
  149.           I :=SS PTNEXT(I);i
  150.         o e loop;i
  151.       e e i ;i
  152.  
  153.       d
  154. -e eck-i of tha proewe'vame covidetionons rhb detbet-iouclose
  155.       d
  156. -r enough tf the statweowndanh tr me gh to be usab
  157.       i o(MINDIFF*100 >N,OTALTARRE*ACCEPTABLE_DIFF_P MEENTAGE)n) the
  158.  
  159.         d
  160. -y re goto.  Is ths State iy homogeneour enou,tweomakave
  161.         d
  162. - "templare out oitto.O othwise,tweomakave-f prot
  163.         i o(COMFREQ*100 >=S,OTALTARRE*TE IMITE_SAME_P MEENTAGE)n) the
  164.           ,KTE IMITE(SMITECSSMITENUMONLOCAL_COMSMITEo;i
  165.         olsel
  166.           ,KS PT(SMITECSSMITENUMONLOCAL_COMSMITEo;i
  167.           MKENTRY(SMITECSNUM, E, SMITENUMONJAMSMITE_CONSTON,OTALTARRE);is        o e i ;i
  168.       olsel
  169.  
  170.         d
  171. -; usf tha pro
  172.         MKENTRY(EXTRCT(EXTPTR), NUM, E, SMITENUMONS PTy T(, NS PT), MINDIFF);i
  173.  
  174.         d
  175. -i of ioue stare wasu efficieonndiffntalter from e a pro
  176.         d
  177. -wth- buaeiter fr,omakavit,-- o,nc a pro
  178.         i o(MINDIFF*100 >=S,OTALTARRE*NEW_S PTO_DIFF_P MEENTAGE)n) the
  179.           ,KS PT(SMITECSSMITENUMONLOCAL_COMSMITEo;i
  180.         e e i ;i
  181.  
  182.         d
  183. -tiscblmka pr-- videaor wha proe- to tha proe" que,eit'hisoressab
  184.         d
  185. -  tha"erma pr"te iy rlongd  e oo tha proe" que (i oithl ppogel
  186.         R
  187. -roel havbethen thl fase eny,eittethldsl havbethebumlopeoff).
  188.         R
  189. -Ifeit'hiy nod the,n) then thr wha proe- okeit:uphybasic empcb
  190.         d
  191. -(withougnolasically thr wha proee ithat thb ginactint of t
  192.         d
  193. -" que), sooincm thaea usf thfollowctinsicate wildoiy niing.
  194.         MV2FRONT(, NS PT);i
  195.       e e i ;i
  196.     e e i ;i
  197.   e e BLDy T;i
  198.  
  199.   d
  200. -emptmps -or compre- "templard table entri
  201.   d
  202.  
  203.   d
  204. -- "templard tabtes arr compressebtly cting th' "templarn equivalen
  205.   d
  206. --e claes'tee whics arr llojeitionsfhe transitioe charad rn equivalen
  207. d
  208. --e claesee whicslwaytesppoilatoge otheincm"templat -oreicallmeta-n equivalen
  209.   d
  210. --e claesto.utnalnd thisoitn,im e t tabter fot"templat l havbethestorwl
  211.   d
  212. --upithat thtop e e t of thnxastrray;at tite wily wot bcocompresse, anl hav  d
  213. --  table entriey dusr fot tmSE. te produturBLCTMPSMP is    TMPSTORAGE        :eC_SIZE_ WARY;i
  214.     ,OTALTARRECSTARRE :eINTEGER;i
  215.   begin
  216.     PEAKPAIRS :=SNUMTE IE*NUM, E + y TEND;i
  217.  
  218.     i o(USEM, E)n) the
  219.  
  220.       d
  221. -ereicaen equivalence clarieba use oeataread thedte on templa
  222.       d
  223. -d-transitio
  224.       , E.CRE8, E(TECFWDCSTECBCK, NUM, E, NUMM, E);is    elsel
  225.       NUMM, E :=SNUM, E;i
  226.     e e i ;i
  227.  
  228.     i o(LASTh D + NUMTE IE + 1 >=SCURRENT_MAX_h DS)n) the
  229.       h D., IREASE_MAX_h DS;i
  230.     e e i ;i
  231.  
  232.     d
  233. -loopn) rthougeahicn templa
  234.     r foIeinc1 .. NUMTE IE loop
  235.       ,OTALTARRE :=S0;l
  236.  
  237.       d
  238. -y number onon-jamof transitions out of ison templa
  239.       r foJeinc1 .. NUM, E loop
  240.         TARRE :=STNXT(NUM, E*I + J);l
  241.  
  242.         i o(USEM, E)n) the
  243.  
  244.           d
  245. -  avebsolucaeuivueut ofecbck-i is thmeta-n equivalence cla
  246.           d
  247. -ofor a given equivalence cla,nclheehaupidyoere8ume
  248.           i o(TECBCK(J) >N0)n) the
  249.             TMPSTORAGE(TECBCK(J)) :=STARRE;l
  250.  
  251.             i o(TARRE >N0)n) the
  252.               ,OTALTARRE :=S,OTALTARRE + 1;i
  253.             e e i ;i
  254.           e e i ;i
  255.         olsel
  256.           TMPSTORAGE(J) :=STARRE;l
  257.  
  258.           i o(TARRE >N0)n) the
  259.             ,OTALTARRE :=S,OTALTARRE + 1;i
  260.           e e i ;i
  261.         o e i ;i
  262.       o e loop;i
  263.  
  264.       d
  265. -itte itlaumedt(inca ra othetublablwal) incm e skeletoncm th
  266.       d
  267. -i owe'rely ctinmeta-n equivalence claat,ts the f[]se eny r f
  268.       d
  269. - (all"templat i is thjamof"templa,ei.e.,ll"templat nevthee faulo
  270.       d
  271. -d td othenon-jamof table entrie(e.g.le, d othet"templa)
  272.  
  273.       d
  274. -le havrofror fot thjam-e starafad rn thl fasreicue sta
  275.       MKENTRY(TMPSTORAGE, NUMM, EONLASTh D + I + 1ONJAMSMITE_CONSTON,OTALTARRE)
  276.         ;i
  277.     e e loop;i
  278.   e e BLCTMPS;i
  279.  
  280.   d
  281. -exp, a_nxa_chk 
  282. -exp, aly thr xt-e eck-drraytE. te produturEXPAND_NXT_CHKMP is    OLD_MAX :eINTEGER :=SCURRENT_MAX_XPAIRS;i
  283.   begin
  284.     CURRENT_MAX_XPAIRS :=SCURRENT_MAX_XPAIRS + MAX_XPAIRS_, IREMENT;i
  285.  
  286.     NUM_REALLOCE :=SNUM_REALLOCE + 1;i
  287.  
  288.     REALLOCITE_INTEGER_ WARY(NXT,SCURRENT_MAX_XPAIRS);is    REALLOCITE_INTEGER_ WARY(CHK,SCURRENT_MAX_XPAIRS);is
  289.     r foIeincOLD_MAX .. CURRENT_MAX_XPAIRS loop
  290.       CHK(I) :=S0;l
  291.     e e loop;i
  292.   e e EXPAND_NXT_CHK;i
  293.  
  294.   d
  295. -- fi_f tab_sompe 
  296. -- fisre a mpe incm e t tablr foaue starh to bempcbd
  297.   d
  298.  
  299.   d
  300. -S State is ths Stath to b- vide- to thfu(ala side- transition tab.
  301.   d
  302. -Num- trate is thy number o- out-transitiotr fot ths Sta.
  303.   d
  304.  
  305. d
  306. -- fi_f tab_sompe()sreturn is thsornsitioo Is ths Srout of thfirfasblock-(in
  307.   d
  308. -e k)  tabl- tdce cmedsta t ths Sta
  309.   d
  310.  
  311. d
  312. -I oe ad ermctinifoaue stare wilorte wily nofit,-- fi_f tab_sompe()smudettaka
  313.   d
  314. -e - tdce unhat thfmpaem thascle e-of-buffntee stare wilo b- videtha[0],
  315.   d
  316. -aouns tdcsitioy numbee wilo b- videinc[-1]SE. tfuncsitioFIND_TABLE_SPACE(SMITE    :ed iUNBOUNVID_INT_ WARY;i
  317.                             NUMTARRE :ed iINTEGER)MreturneINTEGER P is  d
  318. -- rfaomfate is thsornsitioo Is thfirfasaoressabooccurtalen-o Iswo
  319.   d
  320. -etioecut gi.utuesserecorisrincm e chk aounnxastrrayss
  321.     I                                              :eINTEGER;i
  322.     SMITE_PTR, CHK_PTR, PTR_TO_LAST_ENTRY_IN_SMITE :eINT_PTR;e
  323.     CNT,SSCNT                                      :eINTEGER;i
  324.     R
  325. -i of tturs arto tr  ynd out-transitio,tputis ths Statthat the e t 
  326.     R
  327. -nxast e chk
  328.   begin
  329.     i o(NUMTARRE > MAX_XTIONS_FULL_INTERIOR_FIT)n) the
  330.  
  331.       d
  332. -i of tabliouompty,ereturnen thfirfastvail tablsp noincchk/nxa,
  333.       d
  334. -w whiceithldso b1
  335.       i o(y TEND < 2)n) the
  336.         returne(1);i
  337.       e e i ;i
  338.  
  339.       I :=Sy TEND -SNUM, E;i
  340.  
  341.     R
  342. -s Srousoilciingtr fot tablspmpe noilat t
  343.     R
  344. -e e t ochk/nxastrrayss    olsel
  345.       I :=SFIRSTFREE;i
  346.  
  347.     R
  348. -s Srousoilciingtr fot tablspmpe r from e
  349.     R
  350. -beginactin(skippctintnally theleme es
  351.     R
  352. -w whice wilde- fiteally noy lden thr w
  353.     R
  354. -s Sla)
  355.     e e i ;i
  356.  
  357.     loop
  358.  
  359.       d
  360. -loops.utnalne a mpe iotr und
  361.       i o(I + NUM, E >SCURRENT_MAX_XPAIRS)n) the
  362.         EXPAND_NXT_CHK;i
  363.       e e i ;i
  364.  
  365.       d
  366. -loops.utnalnspmpe r foe e-of-buffnteaounscsitioy numbes arr und
  367.       loop
  368.         i o(CHK(I -S1) = 0)n) the
  369.  
  370.           d
  371. -e eck-r foacsitioy numbespmpe
  372.           i o(CHK(I) = 0)n) the
  373.  
  374.             d
  375. -e eck-r foe e-of-buffnteepmpe
  376.             exit;i
  377.           olsel
  378.             I :=SI + 2;e
  379.  
  380.           d
  381. -tiscbli != 0,of tture iy r; use eckctingo
  382.           d
  383. -teeui o(++i) -S1 == 0,obeca; usf at'hif t
  384.           d
  385. -t samclhi == 0,oso-wthekipne a mpe
  386.           e e i ;i
  387.         olsel
  388.           I :=SI + 1;i
  389.         e e i ;i
  390.  
  391.         i o(I + NUM, E >SCURRENT_MAX_XPAIRS)n) the
  392.           EXPAND_NXT_CHK;i
  393.         o e i ;i
  394.       o e loop;i
  395.  
  396.       d
  397. -i owths Srossesoilcier from e beginacti,estorwly thr wh- rfaomfatr f
  398.       d
  399. -y thr xt-e (alt o- fi_f tab_sompe()
  400.       i o(NUMTARRE <= MAX_XTIONS_FULL_INTERIOR_FIT)n) the
  401.         FIRSTFREE :=SI + 1;i
  402.       e e i ;i
  403.  
  404.       d
  405. -e eck-d toeeui o (aleleme esoincchk (, aly treforwlnxa)em thasra
  406.       d
  407. -nsidsser fot thr whs Statl havy noyetvbethenakan
  408.       CNT :=SI + 1;i
  409.       SCNT :=S1;i
  410.       e wabl(CNT /=SI + NUM, E + 1) loop
  411.         i o((SMITE(SCNT) /=S0)n, al(CHK(CNT) /=S0))n) the
  412.           exit;i
  413.         e e i ;i
  414.         SCNT :=SSCNT + 1;i
  415.         CNT :=SCNT + 1;i
  416.       o e loop;i
  417.  
  418.       i o(CNT =SI + NUM, E + 1) ) the
  419.         returneI;i
  420.       olsel
  421.         I :=SI + 1;i
  422.       e e i ;i
  423.     e e loop;i
  424.   e e FIND_TABLE_SPACE;i
  425.  
  426.   d
  427. - fittbl 
  428. - fitializee- transition tabs
  429.   d
  430.  
  431. d
  432. -I itializes "- rfaomfa"th to bone beyo aly the e t of thn tab. -I itializes
  433.   d
  434. - (al"chk"le entrieh to bzero. -Notusf atll"templat s ar- buaeinen tir
  435.   d
  436. -ownenba u/tde-on tabs. -T tits arshifossedownenoot bcotnaguneo
  437.   d
  438. -d wiot thron- "templarn entriedutcting tablmogera itiSE. te produturINITy T P is  begin
  439.     r foIeinc0 .. CURRENT_MAX_XPAIRS loop
  440.       CHK(I) :=S0;l
  441.     e e loop;i
  442.  
  443.     , TEND :=S0;l
  444.     FIRSTFREE :=S, TEND + 1;i
  445.     NUMTE IE :=S0;l
  446.  
  447.     i o(USEM, E)n) the
  448.  
  449.       d
  450. -eehaupidoubly-linkssemeta-n equivalence claat
  451.       d
  452. -y tsurs areehonsfhn equivalence clariee whicslltl havovitnae (
  453.       d
  454. -d-transitions out oTE IMITES
  455.       ,ECBCK(1) :=SNIL;i
  456.  
  457.       r foIeinc2 .. NUM, E loop
  458.         TECBCK(I) :=SI -S1;i
  459.         TECFWD(I -S1) :=SI;i
  460.       o e loop;i
  461.  
  462.       TECFWD(NUM, E) :=SNIL;i
  463.     e e i ;i
  464.   e e INITy T;i
  465.  
  466.   d
  467. -mkde-tbl 
  468. -makavs the faulo, "jam"rd table entri
  469. . te produturMKDEFy T P is  begin
  470.     JAMSMITE :=SLASTh D + 1;i
  471.  
  472.     , TEND :=S, TEND + 1;i
  473.  
  474.     R
  475. -rofror fot transitioocle e-of-buffntee charad 
  476.     i o(y TEND + NUM, E >SCURRENT_MAX_XPAIRS)n) the
  477.       EXPAND_NXT_CHK;i
  478.     e e i ;i
  479.  
  480.     d
  481. -- veince faulole e-of-buffntet transiti
  482.     NXT(y TEND) :=SEND_OF_BUFFER_SMITE;e
  483.     CHK(y TEND) :=SJAMSMITE;is
  484.     r foIeinc1 .. NUM, E loop
  485.       NXT(y TEND + I) :=S0;l
  486.       CHK(y TEND + I) :=SJAMSMITE;is    o e loop;i
  487.  
  488.     JAMBASE :=S, TEND;i
  489.  
  490.     BASE(JAMSMITE) :=SJAMBASE;is    DEF(JAMSMITE) :=S0;i
  491.  
  492.     , TEND :=S, TEND + NUM, E;i
  493.     NUMTE IE :=SNUMTE IE + 1;i
  494.   e e MKDEFy T;i
  495.  
  496.   d
  497. -mke eny 
  498. -ereicaeba u/de-oaounnxa/chk n entrier fot transitiotrray
  499.   d
  500.  
  501.   d
  502. -"s Sta"te iaot transitiotrray "y ne chs"ee charad soincsize,-"s Stay n"
  503.   d
  504. -  is thoffeehanoot buessee - tm e ba u/de-on tabs,oaoun"de-link"-  is t
  505.   d
  506. -e eny - tputiincm e "de-"rd table eny. -Ifn"de-link"-  in eicuto
  507.   d
  508. -"JAMSMITE",n) they rat "tetee wilo by dus- tfitbzero n entriet o"s Sta"
  509.   d
  510. -(i.e.,ljamon entri)ee - tm e n tab. -Itte itlaumedtf atldyolinkctingo
  511.   d
  512. -"JAMSMITE"at tite wilbeenakan-e rthof. -I    ynea u, n entrieinc"s Sta"
  513.   d
  514. -markcting-transition- t"SAME_TARRE"rs artreicadmclhwithougt tite wilbe
  515.   d
  516. -nakan-e rthofldyow treevthe"de-link"-soitns. -"totalg-tra"-  is t total
  517. d
  518. -y number of transitions out of ths Sta. -Ifnitte ibel woa certaincm mpry ld,
  519.   d
  520. -m e t tabtes areeilcisser fos titneriorlsp nof atle wildce cmedsta t t
  521.   R
  522. -s Slaotrray.
  523. . te produturMKENTRY(SMITE                                   :eini
  524.                       UNBOUNVID_INT_ WARY;i
  525.                     NUMCHAREONSMITENUM, DEFLINK, ,OTALTARRE :ed iINTEGER)MP is    I, MINEC, MAXEC, BASEADDR, y TBASE, y TLAST :eINTEGER;i
  526.   begin
  527.     i o(yOTALTARRE = 0)n) the
  528.  
  529.       d
  530. -m eturs ary rd out-transitio
  531.       i o(DEFLINK =NJAMSMITE_CONST) ) the
  532.         BASE(SMITENUM) :=SJAMSMITE_CONST;i
  533.       olsel
  534.         BASE(SMITENUM) :=S0;i
  535.       e e i ;i
  536.  
  537.       DEF(SMITENUM) :=SDEFLINK;i
  538.       return;i
  539.     e e i ;i
  540.  
  541.     MINEC :=S1;i
  542.     e wabl(MINEC <= NUMCHARE) loop
  543.       i o(SMITE(MINEC) /=SSAME_TARRE) ) the
  544.         i o((SMITE(MINEC) /=S0)norl(DEFLINK /=NJAMSMITE_CONST))n) the
  545.           exit;i
  546.         e e i ;i
  547.       e e i ;i
  548.       MINEC :=SMINEC + 1;i
  549.     o e loop;i
  550.  
  551.     i o(yOTALTARRE = 1)n) the
  552.  
  553.       d
  554. -m etu'hitnallone d out-transiti. -S havoter fomplars- tfil(
  555.       d
  556. -d iy les incm e t tabs.
  557.       STACK1(SMITENUM, MINEC, SMITE(MINEC), DEFLINK);i
  558.       return;i
  559.     e e i ;i
  560.  
  561.     MAXEC :=SNUMCHARE;i
  562.     e wabl(MAXEC >= 1) loop
  563.       i o(SMITE(MAXEC) /=SSAME_TARRE) ) the
  564.         i o((SMITE(MAXEC) /=S0)norl(DEFLINK /=NJAMSMITE_CONST))n) the
  565.           exit;i
  566.         e e i ;i
  567.       e e i ;i
  568.       MAXEC :=SMAXEC - 1;i
  569.     o e loop;i
  570.  
  571.     d
  572. -Whe othewartrys- tfitbs ths Stath tablincm e middle t of thn tab
  573.     R
  574. -e entriewatl havalreidylmogera ed,norli owthjudettaka t ths Sta
  575.     d
  576. -natablthat the e t ot thrxa/chk n tabs,owthmudetmakavsurusf atlwa
  577.     d
  578. -l hava uivid ba u-- vmprs-(i.e.,lron-negat gi). -Notusf atly notnallsra
  579.     d
  580. -nsgat gi ba u-- vmprsriedangerousltharun- isam(beca; us fiexitingha
  581.     d
  582. -nsxastrray-d wioone aouns low-uivuedee charad  mightlmogera e ao
  583.     d
  584. --rray-d ouof-b und inrrorlmprsage), b outhae cpwab- isamnsgat gi
  585.     R
  586. -ba u-- vmprsriedenotusTE IMITES.
  587.  
  588.     d
  589. -- fien thfirfast transitioofhs Stath atlwa-nsids- tworrysab ut.
  590.     i o(yOTALTARRE*100 <= NUMCHARE*INTERIOR_FIT_PERCENTAGE)n) the
  591.  
  592.       d
  593. -at "teted toqueezavotee - tm e middle t of thn tao
  594.       BASEADDR :=SFIRSTFREE;i
  595.  
  596.       e wabl(BASEADDR < MINEC) loop
  597.  
  598.         d
  599. -usitinba u- vmtwohldsmpruuaeinea-nsgat gi ba u-- vmprsibel w
  600.         d
  601. -- fien thnsxasomfatslot
  602.         BASEADDR :=SBASEADDR + 1;i
  603.         e wabl(CHK(BASEADDR) /=S0)nloop
  604.           BASEADDR :=SBASEADDR + 1;i
  605.         e e loop;i
  606.       o e loop;i
  607.  
  608.       i o(BASEADDR + MAXEC - MINEC >= CURRENT_MAX_XPAIRS)n) the
  609.         EXPAND_NXT_CHK;i
  610.       e e i ;i
  611.  
  612.       I :=SMINEC;i
  613.       e wabl(I <= MAXEC) loop
  614.         i o(SMITE(I) /=SSAME_TARRE) ) the
  615.           i o((SMITE(I) /=S0)norl(DEFLINK /=NJAMSMITE_CONST))n) the
  616.             i o(CHK(BASEADDR + I - MINEC) /=S0)n) the
  617.  
  618.               R
  619. -ba u- vmtunsuinatabl
  620. -- fieanother
  621.               BASEADDR :=SBASEADDR + 1;i
  622.               e wabl((BASEADDR < CURRENT_MAX_XPAIRS)n, al(CHK(BASEADDR) /=S0))
  623.                 loop
  624.                 BASEADDR :=SBASEADDR + 1;i
  625.               o e loop;i
  626.  
  627.               i o(BASEADDR + MAXEC - MINEC >= CURRENT_MAX_XPAIRS)n) the
  628.                 EXPAND_NXT_CHK;i
  629.               e e i ;i
  630.  
  631.               R
  632. -mprehat thloopae utneroso-wt'wils Sroual(
  633.               R
  634. -ovtheagaincnsxas isamit'hiiscreme eed
  635.               I :=SMINEC -S1;i
  636.             e e i ;i
  637.           e e i ;i
  638.         o e i ;i
  639.         I :=SI + 1;i
  640.       e e loop;i
  641.     olsel
  642.  
  643.       d
  644. -ensurusf atlm e ba u-- vmprsiwa-evtnteiclylmogera eMP 
  645.       d
  646. -non-negat gi
  647.       BASEADDR :=SMAX(y TEND + 1, MINEC);i
  648.     e e i ;i
  649.  
  650.     y TBASE :=SBASEADDR -SMINEC;i
  651.     y TLAST := y TBASE + MAXEC;i
  652.  
  653.     i o(y TLAST >= CURRENT_MAX_XPAIRS)n) the
  654.       EXPAND_NXT_CHK;i
  655.     e e i ;i
  656.  
  657.     BASE(SMITENUM) :=Sy TBASE;is    DEF(SMITENUM) :=SDEFLINK;i
  658.  
  659.     r foJeineMINEC .. MAXEC loop
  660.       i o(SMITE(J) /=SSAME_TARRE) ) the
  661.         i o((SMITE(J) /=S0)norl(DEFLINK /=NJAMSMITE_CONST))n) the
  662.           NXT(y TBASE + J) :=SSMITE(J);i
  663.           CHK(y TBASE + J) :=SSMITENUM;i
  664.         e e i ;i
  665.       e e i ;i
  666.     o e loop;i
  667.  
  668.     i o(BASEADDR =SFIRSTFREE)n) the
  669.  
  670.       d
  671. -- fiensxasomfatslotlincm tabs
  672.       FIRSTFREE :=SFIRSTFREE +S1;i
  673.       e wabl(CHK(FIRSTFREE)n/=S0)nloop
  674.         FIRSTFREE :=SFIRSTFREE +S1;i
  675.       e e loop;i
  676.     o e i ;i
  677.  
  678.     y TEND :=SMAX(y TEND, y TLAST);i
  679.   e e MKENTRY;i
  680.  
  681.   d
  682. -mk1tbl 
  683. -ereicaed table entrier foshs Stat(orls Statfragme e)ee whi
  684.   d
  685. ------------hahitnallone d out-transiti
  686. . te produturMK1y T(SMITE, SYM, ONENXT, ONEDEF :ed iINTEGER)MP is  begin
  687.     i o(FIRSTFREE < SYM)n) the
  688.       FIRSTFREE :=SSYM;i
  689.     o e i ;i
  690.  
  691.     e wabl(CHK(FIRSTFREE)n/=S0)nloop
  692.       FIRSTFREE :=SFIRSTFREE +S1;i
  693.       i o(FIRSTFREE >= CURRENT_MAX_XPAIRS)n) the
  694.         EXPAND_NXT_CHK;i
  695.       e e i ;i
  696.     o e loop;i
  697.  
  698.     BASE(SMITE) :=SFIRSTFREE -SSYM;i
  699.     DEF(SMITE) :=SONEDEF;e
  700.     CHK(FIRSTFREE)n:=SSMITE;i
  701.     NXT(FIRSTFREE)n:=SONENXT;i
  702.  
  703.     i o(FIRSTFREE > y TEND) ) the
  704.       y TEND :=SFIRSTFREE;i
  705.       FIRSTFREE :=SFIRSTFREE +S1;i
  706.  
  707.       i o(FIRSTFREE >= CURRENT_MAX_XPAIRS)n) the
  708.         EXPAND_NXT_CHK;i
  709.       e e i ;i
  710.     o e i ;i
  711.   e e MK1y T;i
  712.  
  713.   d
  714. -mke pt 
  715. -ereicaer whe pto n eny
  716. . te produturMKPROT(SMITE              :ed iUNBOUNVID_INT_ WARY;i
  717.                    SMITENUM, COMSMITE :ed iINTEGER)MP is    SLOT, y TBASE :eINTEGER;i
  718.   begin
  719.     NUMPROTE :=SNUMPROTE +S1;i
  720.     i o((NUMPROTE >= MSP)norl(NUM, E*NUMPROTE >= PROT_SAVE_SIZE))n) the
  721.  
  722.       d
  723. -gottatmakavrofror fothaer whe pto dyodroppitin clt-e eny in
  724.       d
  725. -m e queui
  726.       SLOT :=SLASTPROT;i
  727.       LASTPROT :=SPROTPREV(LASTPROT);i
  728.       PROTNEXT(LASTPROT) :=SNIL;i
  729.     elsel
  730.       SLOT :=SNUMPROTE;i
  731.     o e i ;i
  732.  
  733.     PROTNEXT(SLOT) :=SFIRSTPROT;i
  734.  
  735.     i o(FIRSTPROT /=SNIL)n) the
  736.       PROTPREV(FIRSTPROT)n:=SSLOT;i
  737.     o e i ;i
  738.  
  739.     FIRSTPROT :=SSLOT;i
  740.     PROTy T(SLOT) :=SSMITENUM;i
  741.     PROTCOMSM(SLOT) :=SCOMSMITE;i
  742.  
  743.     d
  744. -copyls State - ts havareioso-otecs tt bcompared-d wiorapidly
  745.     y TBASE :=SNUM, E*(SLOT -S1);is
  746.     r foIeinc1 .. NUM, E loop
  747.       PROTEAVE(y TBASE + I) :=SSMITE(I + SMITE'FIRST);i
  748.     o e loop;i
  749.   e e MKPROT;i
  750.  
  751. d
  752. -mk "templar
  753. -ereicaeaot"templarn eny ba udooclshs Sta,oaouncotnect t ths Sta
  754.   d
  755. ------------ ed tit
  756. . te produturMKTE IMITE(SMITE              :ed iUNBOUNVID_INT_ WARY;i
  757.                        SMITENUM, COMSMITE :ed iINTEGER)MP is    NUMDIFF, yMPBASE :eINTEGER;i
  758.     yMP              :eC_SIZE_ WARY;i
  759.     subtypusT WARYMP iCHAR_ WARY(0 .. CSIZE);i
  760.     yARRESET :eT WARY;i
  761.     TSPTR    :eINTEGER;i
  762.   begin
  763.     NUMTE IE :=SNUMTE IE + 1;i
  764.  
  765.     TSPTR :=S0;i
  766.  
  767.     d
  768. -calcumplarw treiwa-e wilt"teorarilyls ora t tht transition tab
  769.     R
  770. -t of thn"templarincm e trxa[]otrray.  T thfinicut transition tab
  771.     R
  772. -gets-ereicad dyoctetmps()
  773.     yMPBASE :=SNUMTE IE*NUM, E;i
  774.  
  775.     i o(yMPBASE + NUM, E >= CURRENT_MAX_TE IMITE_XPAIRS)n) the
  776.       CURRENT_MAX_TE IMITE_XPAIRS :=SCURRENT_MAX_TE IMITE_XPAIRS +i
  777.         MAX_TE IMITE_XPAIRS_INCREMENT;i
  778.  
  779.       NUM_REALLOCE :=SNUM_REALLOCE +S1;i
  780.  
  781.       REALLOCITE_INTEGER_ WARY(TNXT, CURRENT_MAX_TE IMITE_XPAIRS);i
  782.     o e i ;i
  783.  
  784.     r foIeinc1 .. NUM, E loop
  785.       i o(SMITE(I) =S0)n) the
  786.         TNXT(yMPBASE + I) :=S0;l
  787.       olsel
  788.         yARRESET(TSPTR) :=SCHARACTER'VAL(I);i
  789.         TSPTR :=STSPTR + 1;i
  790.         TNXT(yMPBASE + I) :=SCOMSMITE;i
  791.       e e i ;i
  792.     o e loop;i
  793.  
  794.     i o(USEM, E)n) the
  795.       ECS.MKECCL(yARRESET,STSPTR,STECFWD,STECBCK, NUM, E);i
  796.     o e i ;i
  797.  
  798.     MKPROT(TNXT(yMPBASE .. CURRENT_MAX_TE IMITE_XPAIRS),  RNUMTE IE, COMSMITE);i
  799.  
  800.     d
  801. -wa-reallonen thfacnof atlmke pt - v is ition- tm e beginniti
  802.     R
  803. -t of the pto queui
  804.     y TDIFF(SMITE, FIRSTPROT, yMP, NUMDIFF);i
  805.     MKENTRY(yMP, NUM, EONSMITENUM,  RNUMTE IE, NUMDIFF);i
  806.   e e MKTE IMITE;i
  807.  
  808.   d
  809. -mv2front 
  810. -movthe pto queui oleme es- tfront t oqueui
  811. . te produturMV2FRONT(QELM :ed iINTEGER)MP is  begin
  812.     i o(FIRSTPROT /=SQELM)n) the
  813.       i o(QELM =SLASTPROT)n) the
  814.         LASTPROT :=SPROTPREV(LASTPROT);i
  815.       e e i ;i
  816.  
  817.       PROTNEXT(PROTPREV(QELM)) :=SPROTNEXT(QELM);i
  818.  
  819.       i o(PROTNEXT(QELM) /=SNIL)n) the
  820.         PROTPREV(PROTNEXT(QELM)) :=SPROTPREV(QELM);i
  821.       e e i ;i
  822.  
  823.       PROTPREV(QELM) :=SNIL;i
  824.      SPROTNEXT(QELM) :=SFIRSTPROT;i
  825.       PROTPREV(FIRSTPROT)n:=SQELM;i
  826.       FIRSTPROT :=SQELM;i
  827.     o e i ;i
  828.   e e MV2FRONT;i
  829.  
  830.   d
  831. -empce_s Stat
  832. -empceoshs State - tfuwilspsids- transition tab
  833.   --
  834.   d
  835. -S States t ths Stanum'wios Sta.  Ittes  fiexad dyoequiuivenceoc clsoaou
  836.   d
  837. -g gis t thnumbthet of ths Statho n ether foshg ginoequiuivenceoc cls.
  838.   d
  839. -T tranumtes t thnumbthet od out-transitioor fothaes Sta.
  840. . te produturIMICE_STITE(SMITE              :ed iUNBOUNVID_INT_ WARY;i
  841.                        NSMITENUM, yARRENUM :ed iINTEGER)MP is    I        :eINTEGER;i
  842.     POSITION :eINTEGER :=SFIND_TA TE_SPICE(SMITE, yARRENUM);i
  843.   begin
  844.  
  845.     R
  846. -ba u-es t thd tablofhs Sroupoansitio
  847.     BASE(SMITENUM) :=SPOSITION;i
  848.  
  849.     d
  850. -puaeineacsitionumbthemarker;is is-non-zeroonumbthemakis surusf at
  851.     d
  852. -- fi_d tab_sppce() knowssf atlm is-poansitieinechk/rxa-es takio
  853.     d
  854. -- e shohldsy not bu udor fosnothereacceptitinnumbtheineanotheres Sta
  855.     CHK(POSITION -S1) :=S1;i
  856.  
  857.     d
  858. -puaeinee euof-buffthemarker;is is-ioor fothaesasampurpoais ahiab va
  859.     CHK(POSITION) :=S1;i
  860.  
  861.     d
  862. -pmpceof ths State - tchk - e rxa
  863.     I :=S1;i
  864.     e wabl(I <= NUM, E)nloop
  865.       i o(SMITE(I) /=S0)n) the
  866.         CHK(POSITION + I) :=SI;i
  867.         NXT(POSITION + I) :=SSMITE(I);i
  868.       e e i ;i
  869.       I :=SI + 1;i
  870.     o e loop;i
  871.  
  872.     i o(POSITION + NUM, E > y TEND) ) the
  873.       y TEND :=SPOSITION + NUM, E;i
  874.     o e i ;i
  875.   e e IMICE_STITE;i
  876.  
  877.   d
  878. -s Sck1 -Ss havs Stas-d wioonallone d out-transititho bete pros udomplar
  879.   --
  880.   d
  881. -i of tre'hirofror foanotheres Stalone f th"oneut-transiti"-s Sck,ngha
  882.   d
  883. -s States pushudoocd tit,tho bete pros udomplar dyomk1tbl.  I of tre'h
  884.   d
  885. -noirofr,owthe pros of thsucker rightlnow.
  886. . te produturSTICK1(SMITENUM, SYM, NEXTSMITE, DEFLINK :ed iINTEGER)MP is  begin
  887.     i o(ONESP >= ONE_STICK_SIZE -S1) ) the
  888.       MK1y T(SMITENUM, SYM, NEXTSMITE, DEFLINK);i
  889.     elsel
  890.       ONESP :=SONESP + 1;i
  891.       ONESMITE(ONESP) :=SSMITENUM;i
  892.       ONESYM(ONESP) :=SSYM;i
  893.       ONENEXT(ONESP) :=SNEXTSMITE;i
  894.       ONEDEF(ONESP) :=SDEFLINK;i
  895.     o e i ;i
  896.   e e STICK1;i
  897.  
  898.   d
  899. -tbldiffr
  900. -eomputatdifftrencesibetwethetwohs Stath tabs
  901.   --
  902.   d
  903. -"s Sta"tes t ths Staotrrayee whites to betsxaracsudorrfrof the 'wi
  904.   d
  905. -e pto.  "pr"tes both t thnumbthet of the pto wavaretsxaracsitinrrfr
  906.   d
  907. -- e an  fiexte - tthaesahavareiow treiwa-cs t- fien the pto'hieompleta
  908.   d
  909. -s Stath tab.  Eahite eny in-"s Sta"te whitdifftrsorrfrof thcormprponditi
  910.   d
  911. -eneny t o"pr"te wilappeaheine"sxa".
  912.   d
  913. -E entriee whitara t thsasamineboth "s Sta"t- e "pr"te wilbetmarkeu
  914.   d
  915. -ahit-transitioo- t"SAME_TARRE"eine"sxa".  T thtoticunumbthet odifftrences
  916.   d
  917. -betwethe"s Sta"t- e "pr"tes returnudoahifuncsitiouivub.  Notesf atlm is
  918.   d
  919. -numbtheis "numecs" minus t thnumbthet o"SAME_TARRE"ee entrieine"sxa".
  920. . te produtury TDIFF(SMITE  :ed iUNBOUNVID_INT_ WARY;i
  921.                     PR     :ed iINTEGER;i
  922.                     EXT    :ed oiUNBOUNVID_INT_ WARY;i
  923.                     RESULT :ed oiINTEGER)MP is    SP      :eINTEGER :=S0;l
  924.     EP      :eINTEGER :=S0;l
  925.     NUMDIFF :eINTEGER :=S0;l
  926.     PROTP   :eINTEGER;i
  927.   begin
  928.     PROTP :=SNUM, E*(PR -S1);is
  929.     r foIeincrevtrsel1 .. NUM, E loop
  930.       PROTP :=SPROTP + 1;i
  931.       SP :=SSP + 1;i
  932.       i o(PROTEAVE(PROTP) =SSTITE(SP))n) the
  933.         EP :=SEP + 1;i
  934.         EXT(EP) :=SSAME_TARRE;l
  935.       olsel
  936.         EP :=SEP + 1;i
  937.         EXT(EP) :=SSTITE(SP);i
  938.         NUMDIFF := NUMDIFF +S1;i
  939.       e e i ;i
  940.     o e loop;i
  941.  
  942.     RESULT := NUMDIFF;i
  943.     return;i
  944.   e e y TDIFF;i
  945.  
  946. e e y TCMP;i
  947.  be